home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 182_01 / tprint.c < prev    next >
C/C++ Source or Header  |  1990-07-30  |  3KB  |  156 lines

  1.  
  2. /****************************************************************
  3. *                                *
  4. *            P R I N T                *
  5. *                                *
  6. *        ASCII file transfer to PRN device.         *
  7. *                                *
  8. *    T. Jennings 6 Nov. 82                    *
  9. *      created 23 Sept. 82                    *
  10. *                                *
  11. ****************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <ctype.h>
  15.  
  16. #define    NUL    0x00
  17. #define    CR    0x0d
  18. #define    LF    0x0a
  19. #define    HT    0x09
  20. #define    FF    0x0c
  21. #define    DEL    0x7f
  22.  
  23. #define    PAGELEN    66
  24. #define    BOTTOM    58
  25. FILE *printfile, *fopen();
  26. FILE *printer;
  27. char c;
  28. int line,column;
  29. int tabwidth;
  30. int formfeed;
  31. int number,lineno;
  32. int brackets,brkt_level;
  33. int pageno;
  34. int printable;
  35. int titles;
  36. int margin;
  37. int i;
  38. char filename[12];
  39.  
  40. main(argc,argv)
  41. int argc;
  42. char **argv;
  43. {
  44.     fprintf(stderr,"\nFile Print Utility 6 Nov. 82\n");
  45.     number =0;        /* dont number lines */
  46.     titles= 0;        /* no top of page title */
  47.     margin= 0;        /* no left margin tab */
  48.     brackets =0;        /* dont count brackets */
  49.     brkt_level =0;
  50.     column =0;
  51.     line =0; 
  52.     tabwidth =8;
  53.     formfeed =1;
  54.     lineno =0;        /* current line number, */
  55.     pageno =1;
  56.     printable =0;
  57.  
  58.     if (--argc) {
  59.         if ((printfile=fopen(*++argv,"r")) ==NULL) {
  60.             fprintf(stderr,"PRINT: Can't find file '%s'.\n",*argv);
  61.             exit();
  62.         }
  63.         strcpy(filename,*argv);        /* save filename for title */
  64.  
  65.         if ((printer= fopen("PRN","w")) ==NULL) {
  66.             fprintf(stderr,"PRINT: Can't open LST device\n");
  67.             exit();
  68.         }
  69.         while (--argc) {        /* look for options */
  70.             c= **++argv;
  71.             switch(tolower(c)) {
  72.             case 't':
  73.                 fprintf(stderr,"\t-Page headers\n");
  74.                 titles= 1;
  75.                 break;
  76.             case 'n':        /* line numbers */
  77.                 fprintf(stderr,"\t-Line numbers\n");
  78.                 number =1;
  79.                 break;
  80.             case 'c':        /* C source */
  81.                 fprintf(stderr,"\t-'C' source\n");
  82.                 brackets =1;
  83.                 break;
  84.             case 'm':
  85.                 fprintf(stderr,"\t-Left margin\n");
  86.                 margin= 1;
  87.                 break;
  88.             default:
  89.                 fprintf(stderr,"Illegal option: '%s'\n",*argv);
  90.                 break;
  91.             }
  92.         }
  93.         title();
  94.         printchar(LF);
  95.         while ((i=fgetc(printfile)) !=EOF) {
  96.             c=i;            /* type conversion, */
  97.             printchar(c);        /* print character, */
  98.             if (c =='{')        /* count bracket levels, */
  99.                 ++brkt_level;
  100.             if (c == '}') {        /* if closing bracket, and */
  101.                 if ((--brkt_level ==0) && brackets) {
  102.                     printchar(FF); /* top level, formfeed */
  103.                 }
  104.             }
  105.         }
  106.         fputc(LF,printer);
  107.         fputc(FF,printer);        /* do a formfeed, */
  108.         exit();
  109.     }
  110.     fprintf(stderr,"\nYou must specify a file, followed by any options");
  111.     fprintf(stderr,"\n\tT\tTop of page headers");
  112.     fprintf(stderr,"\n\tN\tLine numbers");
  113.     fprintf(stderr,"\n\tC\tC source");
  114.     fprintf(stderr,"\n\tM\tLeft margin");
  115.     fprintf(stderr,"\nExample:  PRINT <filename> N C T M");
  116.     exit();
  117. }
  118. /* Print character <C> to the printer. */
  119.  
  120. printchar(c)
  121. char c;
  122. {
  123.     switch (c) {
  124.     case LF:
  125.         ++lineno;
  126.         fputc(CR,printer);
  127.         fputc(c,printer);        /* then line feed, */
  128.         if (++line >= BOTTOM)         /* if bottom margin, */
  129.             printchar(FF);        /* formfeed, */
  130.         if (number) 
  131.             fprintf(printer,"%3d: \t",lineno);
  132.         if (margin)
  133.             printchar(HT);        /* left margins */
  134.         break;
  135.     case FF:
  136.         fputc(LF,printer);
  137.         fputc(c,printer);
  138.         line =0; ++pageno;
  139.         title();
  140.         break;
  141.     default:
  142.         fputc(c,printer);
  143.         break;
  144.     }
  145.     return;
  146. }
  147. /* If the title flag is set, type the title across the top of the page. */
  148.  
  149. title() {
  150.     if (titles) {
  151.         fprintf(printer,"File: %-12s%58sPage %d\n",filename," ",pageno);
  152.         ++line;
  153.     }
  154.     return;
  155. }
  156.